﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace BatallaNavalgo.Tests
{
    [TestClass]
    public class TestDisparoConvencional
    {
        DisparoConvencional disparo;
        public TestDisparoConvencional()
        {
            disparo = new DisparoConvencional(0);
        }

        [TestMethod]
        public void TestDisparoConvencionalDebeIndicarQueSuCostoEsDe200()
        {
            Assert.AreEqual(200, disparo.Costo);
        }

        
        [TestMethod]
        public void TestDisparoConvencionalDebeIndicarTrueParaInformarQueDebeImpactarEnEseTurno()
        {
            Assert.IsTrue(disparo.DebeImpactar());
        }

        [TestMethod]
        public void TestDisparoConvencionalDebeImpactarAlFragmentoDeNaveDeUnaLancha()
        {
            int orientacion = 0;
            int[] posicion = new int[2];
            Tablero tablero = new Tablero();
            posicion[0] = 0;
            posicion[1] = 1;
            int[] direccion = new int[2];
            direccion[0] = 0;
            direccion[1] = 1;
            Lancha lancha = new Lancha(posicion, direccion,orientacion,tablero);
            FragmentoDeNave[] fragmentos = lancha.Fragmentos;
            disparo.Impactar(lancha, fragmentos[0]);
            Assert.IsTrue(fragmentos[0].EstaDestruido());
        }

        [TestMethod]
        public void TestDisparoConvencionalDebeImpactarAlFragmentoDeNaveDeUnDestructor()
        {
            int orientacion = 0;
            int[] posicion = new int[2];
            Tablero tablero = new Tablero();
            posicion[0] = 0;
            posicion[1] = 1;
            int[] direccion = new int[2];
            direccion[0] = 0;
            direccion[1] = 1;
            Destructor destructor = new Destructor(posicion, direccion,orientacion, tablero);
            FragmentoDeNave[] fragmentos = destructor.Fragmentos;
            disparo.Impactar(destructor, fragmentos[0]);
            Assert.IsTrue(fragmentos[0].EstaDestruido());
        }

        [TestMethod]
        public void TestDisparoConvencionalDebeDestruirTodosLosFragmentosDelBuqueAlImpactarConUnFragmento()
        {
            int orientacion = 0;
            int[] posicion = new int[2];
            Tablero tablero = new Tablero();
            posicion[0] = 0;
            posicion[1] = 1;
            int[] direccion = new int[2];
            direccion[0] = 0;
            direccion[1] = 1;
            Buque buque = new Buque(posicion, direccion,orientacion, tablero);
            FragmentoDeNave[] fragmentos = buque.Fragmentos;
            disparo.Impactar(buque, fragmentos[0]);
            for (int i = 0; i < 4; i++)
            {
                Assert.IsTrue(fragmentos[i].EstaDestruido());
            }
        }

        [TestMethod]
        public void TestDisparoConvencionalDebeImpactarAlFragmentoDeNaveDeUnPortaAviones()
        {
            int orientacion = 0;
            int[] posicion = new int[2];
            Tablero tablero = new Tablero();
            posicion[0] = 0;
            posicion[1] = 1;
            int[] direccion = new int[2];
            direccion[0] = 0;
            direccion[1] = 1;
            PortaAviones portaAviones = new PortaAviones(posicion, direccion,orientacion, tablero);
            FragmentoDeNave[] fragmentos = portaAviones.Fragmentos;
            disparo.Impactar(portaAviones, fragmentos[0]);
            Assert.IsTrue(fragmentos[0].EstaDestruido());
        }

        [TestMethod]
        public void TestDisparoConvencionalDebeImpactarAlFragmentoDeNaveDeUnRompeHielos()
        {
            int orientacion = 0;
            int[] posicion = new int[2];
            Tablero tablero = new Tablero();
            posicion[0] = 0;
            posicion[1] = 1;
            int[] direccion = new int[2];
            direccion[0] = 0;
            direccion[1] = 1;
            RompeHielos rompeHielos = new RompeHielos(posicion, direccion,orientacion, tablero);
            FragmentoDeNave[] fragmentos = rompeHielos.Fragmentos;
            disparo.Impactar(rompeHielos, fragmentos[0]);
            Assert.IsFalse(fragmentos[0].EstaDestruido());
        }
        


    }
}
